/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager;

import br.com.deployment.dao.AnexoDao;
import br.com.deployment.dao.PessoaDao;
import br.com.deployment.dao.TituloDao;
import br.com.deployment.entidade.arquivo.Anexo;
import br.com.deployment.entidade.acesso.Usuario;
import br.com.deployment.entidade.registroimovel.Transferencia;
import br.com.deployment.entidade.registroimovel.Titulo;
import br.com.deployment.entidade.registroimovel.Operacao;
import br.com.deployment.entidade.registroimovel.Imovel;
import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.message.Msg;
import br.com.deployment.servico.OperacaoServico;
import br.com.deployment.servico.TransferenciaServico;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author elyjr
 */
@ManagedBean
@SessionScoped
public class ManagerTransfencia  implements Serializable{

    @EJB
    TransferenciaServico transferenciaServico;
   
    @EJB
    PessoaDao pessoaDao;
    
    @EJB
    AnexoDao anexoDao;
    
    @EJB
    TituloDao tituloDao;
    
    @EJB
    OperacaoServico operacaoServico;
    private Transferencia transferencia;
    private Transferencia transferenciaImovel;
    private Imovel imovelTransf;
    private Operacao operacaoTransf;
    private Anexo anexoTransf;
    private int aux;
    private boolean regAnterior;
    private Usuario usuario;

    public ManagerTransfencia() {
    }

    @PostConstruct
    public void init() {
        transferencia = new Transferencia();
        transferenciaImovel = new Transferencia();
        transferencia.setTitulo(new Titulo());
        regAnterior = false;
        anexoTransf = new Anexo();

        imovelTransf = new Imovel();
        operacaoTransf = new Operacao();
        usuario = new Usuario();

    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Anexo getAnexoTransf() {
        return anexoTransf;
    }

    public void setAnexoTransf(Anexo anexoTransf) {
        this.anexoTransf = anexoTransf;
    }

    public Transferencia getTransferenciaImovel() {
        return transferenciaImovel;
    }

    public void setTransferenciaImovel(Transferencia transferenciaImovel) {
        this.transferenciaImovel = transferenciaImovel;
    }

    public Imovel getImovelTransf() {
        return imovelTransf;
    }

    public void setImovelTransf(Imovel imovelTransf) {
        this.imovelTransf = imovelTransf;
    }

    public Operacao getOperacaoTransf() {
        return operacaoTransf;
    }

    public void setOperacaoTransf(Operacao operacaoTransf) {
        this.operacaoTransf = operacaoTransf;
    }

    public int getAux() {
        return aux;
    }

    public void setAux(int aux) {
        this.aux = aux;
    }

    public boolean isRegAnterior() {
        return regAnterior;
    }

    public void setRegAnterior(boolean regAnterior) {
        this.regAnterior = regAnterior;
    }

    public Transferencia getTransferencia() {
        return transferencia;
    }

    public void setTransferencia(Transferencia transferencia) {
        this.transferencia = transferencia;
    }

    public void selecionaAdquirente(Pessoa pessoa) {
        if (transferencia.getAdquirente() != null) {
            transferencia.getAdquirente().add(pessoa);
        } else {
            List<Pessoa> lstPessoa = new ArrayList<Pessoa>();
            lstPessoa.add(pessoa);
            transferencia.setAdquirente(lstPessoa);
        }
    }

    public void selecionaAdquirenteTransf(Pessoa pessoa) {
        if (transferenciaImovel.getAdquirente() != null) {
            transferenciaImovel.getAdquirente().add(pessoa);
        } else {
            List<Pessoa> lstPessoa = new ArrayList<Pessoa>();
            lstPessoa.add(pessoa);
            transferenciaImovel.setAdquirente(lstPessoa);
        }
    }

    public void selecionaTransmitente(Pessoa pessoa) {

        if (transferencia.getTransmitente() != null) {
            transferencia.getTransmitente().add(pessoa);

        } else {
            List<Pessoa> lstPessoa = new ArrayList<Pessoa>();
            lstPessoa.add(pessoa);
            transferencia.setTransmitente(lstPessoa);
        }
    }

    public void transferir(Imovel imovel) {
       transferenciaServico.transferir(imovel, transferencia);
    }

    public void transfImovel() {
        transferenciaServico.transfImovel(imovelTransf, transferenciaImovel);
        reinit();
    }
    
     public void transferirImovel(Imovel imovel) {
        imovelTransf = imovel;

        try {
            Transferencia t = transferenciaServico.find(transferenciaServico.verificaUltimaTrans(imovel.getId()).getId());
            transferenciaImovel.setTransmitente(t.getAdquirente());
            redirect("transferirImovel.xhtml");
            operacaoTransf = operacaoServico.find(imovel.getOperacao().getId());
        } catch (Exception e) {
            Msg msg = new Msg();
            msg.messagemError("Impossivel localizar última transferência");
        }

    }

    public void reinit() {
        transferenciaImovel = new Transferencia();
        imovelTransf = new Imovel();
        anexoTransf = new Anexo();
    }

    public void atribui(Titulo titulo) {
        this.transferencia.setTitulo(titulo);
    }

    public void removeListTransmitente(Pessoa pessoa) {
        if (pessoa != null) {
            transferencia.getTransmitente().remove(pessoa);
        }
    }

    public void removeListAdquirente(Pessoa pessoa) {
        if (pessoa != null) {
            transferencia.getAdquirente().remove(pessoa);
        }
    }

    public void removeListAdquirenteTransf(Pessoa pessoa) {
        if (pessoa != null) {
            transferenciaImovel.getAdquirente().remove(pessoa);
        }
    }

    public void handleSelect(SelectEvent event) {
        Titulo titulo = (Titulo) event.getObject();
        transferencia.setTitulo(tituloDao.find(titulo.getId()));
    }

    public Imovel incluiAnexo(List<Anexo> anexo) {
        if (anexo != null) {
            transferenciaImovel.setAnexo(anexo);
        }
        return null;
    }

   

    public void redirect(String string) {
        try {
            FacesContext context = FacesContext.getCurrentInstance();
            context.getExternalContext().redirect(string);
        } catch (IOException ex) {
            Logger.getLogger(ManagerImovel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void handleFileUpload(FileUploadEvent event) {
        List<Anexo> anexoList = new ArrayList<Anexo>();

        byte[] conteudo = event.getFile().getContents();
        String tipo = event.getFile().getContentType();
        String nome = event.getFile().getFileName();

        anexoTransf.setArquivo(conteudo);
        anexoTransf.setTipo(tipo);
        anexoTransf.setNome(nome);

        anexoList.add(anexoTransf);
        transferenciaImovel.setAnexo(anexoList);

        anexoTransf = new Anexo();

        String caminho = "\\opt\\" + nome;

        FileOutputStream fos;
        try {
            fos = new FileOutputStream(caminho);
            fos.write(conteudo);
            fos.close();
            Msg.messagemInfo("" + caminho + "");
        } catch (FileNotFoundException ex) {
            Msg.messagemWarn("Arquivo não foi encontrado " + ex);
        } catch (IOException ex) {
            Msg.messagemError("Erro no arquivo " + ex);
        }
    }
    
}
